home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_vim.idb / usr / freeware / share / vim / doc / eval.txt.z / eval.txt
Encoding:
Text File  |  1998-10-28  |  30.1 KB  |  875 lines

  1. *eval.txt*      For Vim version 5.0.  Last modification: 1998 Feb 17
  2.  
  3.  
  4.           VIM REFERENCE MANUAL    by Bram Moolenaar
  5.  
  6.  
  7. Expression evaluation                    *expression* *expr*
  8.  
  9. Note: Expression evaluation can be disabled at compile time.  If this has been
  10. done, the features in this document are not available.  See |+eval|.
  11.  
  12. 1. Variables        |variables|
  13. 2. Expression syntax    |expression-syntax|
  14. 3. Internal variable    |internal-variables|
  15. 4. Function calls    |functions|
  16. 5. Commands        |expression-commands|
  17.  
  18. {Vi does not have any of these commands}
  19.  
  20. ==============================================================================
  21. 1. Variables                        *variables*
  22.  
  23. There are two types of variables:
  24.  
  25. Number        a 32 bit signed number
  26. String        a NUL terminated string of 8-bit unsigned characters.
  27.  
  28. These are converted automatically, depending on how they are used.
  29.  
  30. Conversion from a Number to a String is by making the ASCII representation of
  31. the Number.  Examples:
  32. >    Number 123    -->    String "123"
  33. >    Number 0    -->    String "0"
  34. >    Number -1    -->    String "-1"
  35.  
  36. Conversion from a String to a Number is done by converting the first digits
  37. to a number.  Hexadecimal "0xf9" and Octal "017" numbers are recognized.  If
  38. the String doesn't start with digits, the result is zero.  Examples:
  39. >    String "456"    -->    Number 456
  40. >    String "6bar"    -->    Number 6
  41. >    String "foo"    -->    Number 0
  42. >    String "0xf1"    -->    Number 241
  43. >    String "0100"    -->    Number 64
  44.  
  45. For boolean operators Numbers are used.  Zero is FALSE, non-zero is TRUE.
  46.  
  47. Note that in the command
  48.     :if "foo"
  49. "foo" is converted to 0, which means FALSE.  To test for a non-empty string,
  50. use strlen():
  51.     :if strlen("foo")
  52.  
  53. ==============================================================================
  54. 2. Expression syntax                    *expression-syntax*
  55.  
  56. Expression syntax summary, from least to most significant:
  57.  
  58. |expr1|    expr2 || expr2 ..    logical OR
  59.  
  60. |expr2|    expr3 && expr3 ..    logical AND
  61.  
  62. |expr3|    expr4 == expr4        equal
  63.     expr4 != expr4        not equal
  64.     expr4 >     expr4        greater than
  65.     expr4 >= expr4        greater than or equal
  66.     expr4 <     expr4        smaller than
  67.     expr4 <= expr4        smaller than or equal
  68.     expr4 =~ expr4        regexp matches
  69.     expr4 !~ expr4        regexp doesn't match
  70.  
  71. |expr4|    expr5 +     expr5 ..    number addition
  72.     expr5 -     expr5 ..    number subtraction
  73.     expr5 .     expr5 ..    string concatenation
  74.  
  75. |expr5|    expr6 *     expr6 ..    number multiplication
  76.     expr6 /     expr6 ..    number division
  77.     expr6 %     expr6 ..    number modulo
  78.  
  79. |expr6|    ! expr6            logical NOT
  80.     - expr6            unary minus
  81.  
  82. |expr7|    expr8[expr1]        index in String
  83.  
  84. |expr8|    number            number constant
  85.     "string"        string constant
  86.     'string'        literal string constant
  87.     &option            option value
  88.     (expr1)            nested expression
  89.     variable        internal variable
  90.     $VAR            environment variable
  91.     @r            contents of register 'r'
  92.     function(expr1, expr1)    function call
  93.  
  94. ".." indicates that the operations in this level can be concatenated.
  95. Example:
  96. >    &nu || &list && &shell == "csh"
  97.  
  98. All expressions within one level are parsed from left to right.
  99.  
  100.  
  101. expr1 and expr2                        *expr1* *expr2*
  102. ---------------
  103.  
  104.                         *expr-barbar* *expr-&&*
  105. The "||" and "&&" operators take one argument on each side.  The arguments
  106. are (converted to) Numbers.  The result is:
  107.  
  108.          input                 output            ~
  109.     n1        n2        n1 || n2    n1 && n2    ~
  110.     zero    zero        zero        zero
  111.     zero    non-zero    non-zero    zero
  112.     non-zero    zero        non-zero    zero
  113.     non-zero    non-zero    non-zero    non-zero
  114.  
  115. The operators can be concatenated, for example:
  116.  
  117. >    &nu || &list && &shell == "csh"
  118.  
  119. Note that "&&" takes precedence over "||", so this has the meaning of:
  120.  
  121. >    &nu || (&list && &shell == "csh")
  122.  
  123. All arguments are computed, there is no skipping if the value of an argument
  124. doesn't matter, because the result is already known.  This is different from
  125. C, although it only matters for errors (unknown variables), since there are no
  126. side effects from an expression.
  127.  
  128.  
  129. expr3                            *expr3*
  130. -----
  131.     expr4 == expr4        equal            *expr-==*
  132.     expr4 != expr4        not equal        *expr-!=*
  133.     expr4 >     expr4        greater than        *expr->*
  134.     expr4 >= expr4        greater than or equal    *expr->=*
  135.     expr4 <     expr4        smaller than        *expr-<*
  136.     expr4 <= expr4        smaller than or equal    *expr-<=*
  137.     expr4 =~ expr4        regexp matches        *expr-=~*
  138.     expr4 !~ expr4        regexp doesn't match    *expr-!~*
  139.  
  140. When comparing a String with a Number, the String is converted to a Number,
  141. and the comparison is done on Numbers.
  142.  
  143. When comparing two Strings, this is done with strcmp().  This results in the
  144. mathematical difference, not necessarily the alphabetical difference in the
  145. local language.
  146.  
  147. The "=~" and "!~" operators match the lefthand argument with the righthand
  148. argument, which is used as a pattern.  See |pattern| for what a pattern is.
  149. This matching is always done like 'magic' was set, no matter what the actual
  150. value of 'magic' is.  This makes scripts portable.  The value of 'ignorecase'
  151. does matter though.  To avoid backslashes in the regexp pattern to be doubled,
  152. use a single-quote string, see |literal-string|.
  153.  
  154.  
  155. expr4 and expr5                        *expr4* *expr5*
  156. ---------------
  157.     expr5 +     expr5 ..    number addition        *expr-+*
  158.     expr5 -     expr5 ..    number subtraction    *expr--*
  159.     expr5 .     expr5 ..    string concatenation    *expr-.*
  160.  
  161.     expr6 *     expr6 ..    number multiplication    *expr-star*
  162.     expr6 /     expr6 ..    number division        *expr-/*
  163.     expr6 %     expr6 ..    number modulo        *expr-%*
  164.  
  165. For all, except ".", Strings are converted to Numbers.
  166.  
  167. Note the difference between "+" and ".":
  168.     "123" + "456" = 579
  169.     "123" . "456" = "123456"
  170.  
  171. When the righthand side of '/' is zero, the result is 0xfffffff.
  172. When the righthand side of '%' is zero, the result is 0.
  173.  
  174.  
  175. expr6                            *expr6*
  176. -----
  177.     ! expr6            logical NOT        *expr-!*
  178.     - expr6            unary minus        *expr-unary--*
  179.  
  180. For '!' non-zero becomes zero, zero becomes one.
  181. For '-' the sign of the number is changed.
  182.  
  183. A String will be converted to a Number first.
  184.  
  185. These two can be repeated and mixed.  Examples:
  186.     !-1        == 0
  187.     !!8        == 1
  188.     --9        == 9
  189.  
  190.  
  191. expr7                            *expr7*
  192. -----
  193.     expr8[expr1]        index in String        *expr-[]*
  194.  
  195. This results in a String that contains the expr1'th single character from
  196. expr8.  expr8 is used as a String, expr1 as a Number.
  197.  
  198. Note that index zero gives the first character.  This is like it works in C.
  199. Careful: column numbers start with one!  Example, to get the character under
  200. the cursor:
  201. >   c = getline(line("."))[col(".") - 1]
  202.  
  203. If the length of the String is less than the index, the result is an empty
  204. String.
  205.  
  206.                             *expr8*
  207. number
  208. ------
  209.     number            number constant        *expr-number*
  210.  
  211. Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0).
  212.  
  213.  
  214. string                            *expr-string*
  215. ------
  216.     "string"        string constant        *expr-quote*
  217.  
  218. Note that double quotes are used.
  219.  
  220. A string constant accepts these special characters:
  221.     \...    three-digit octal number (e.g., "\316")
  222.     \..    two-digit octal number (must be followed by non-digit)
  223.     \.    one-digit octal number (must be followed by non-digit)
  224.     \x..    two-character hex number (e.g., "\x1f")
  225.     \x.    one-character hex number (must be followed by non-hex)
  226.     \X..    same as \x..
  227.     \X.    same as \x.
  228.     \b    backspace <BS>
  229.     \e    escape <Esc>
  230.     \f    formfeed <FF>
  231.     \n    newline <NL>
  232.     \r    return <CR>
  233.     \t    tab <Tab>
  234.     \\    backslash
  235.     \"    double quote
  236.     \<xxx>    Special key named "xxx".  e.g. "\<C-W>" for CTRL-W.
  237.  
  238. Note that "\000" and "\x00" force the end of the string.
  239.  
  240.  
  241. literal-string                        *literal-string*
  242. ---------------
  243.     'string'        literal string constant        *expr-'*
  244.  
  245. Note that single quotes are used.
  246.  
  247. This string is taken literally.  No backslashes are removed or have a special
  248. meaning.  A literal-string cannot contain a single quote.  Use a normal string
  249. for that.
  250.  
  251.  
  252. option                            *expr-option*
  253. ------
  254.     &option            option value
  255.  
  256. Any option name can be used here.  See |options|.
  257.  
  258.  
  259. register                        *expr-register*
  260. --------
  261.     @r            contents of register 'r'
  262.  
  263. The result is the contents of the named register, as a single string.
  264. Newlines are inserted where required.  To get the contents of the unnamed
  265. register use @@.  The '=' register can not be used here.  See |registers| for
  266. an explanation of the available registers.
  267.  
  268.  
  269. nesting                            *expr-nesting*
  270. -------
  271.     (expr1)            nested expression
  272.  
  273.  
  274. environment variable                    *expr-env*
  275. --------------------
  276.     $VAR            environment variable
  277.  
  278. The String value of any environment variable.  When it is not defined, the
  279. result is an empty string.
  280.  
  281.  
  282. internal variable                    *expr-variable*
  283. -----------------
  284.     variable        internal variable
  285. See below |internal-variables|.
  286.  
  287.  
  288. function call                        *expr-function*
  289. -------------
  290.     function(expr1, expr1)    function call
  291. See below |functions|.
  292.  
  293.  
  294. ==============================================================================
  295. 3. Internal variable                    *internal-variables*
  296.  
  297. An internal variable name can be made up of letters, digits and '_'.  But it
  298. cannot start with a digit.
  299.  
  300. An internal variable is created with the ":let" command |:let|.
  301. An internal variable is destroyed with the ":unlet" command |:unlet|.
  302. Using a name that isn't an internal variable, or an internal variable that has
  303. been destroyed, results in an error.
  304.  
  305. A variable name that is preceded with "b:" is local to the current buffer.
  306. A variable name that is preceded with "w:" is local to the current window.
  307.  
  308. Predefined variables:
  309.                             *count-variable*
  310. count        The count given for the last Normal mode command.  Can be used
  311.         to get the count before a mapping.  Example:
  312. >    :map _x :<C-U>echo "the count is " . count<CR>
  313.         Note: The <C-U> is required to remove the line range that you
  314.         get when typing ':' after a count.  read-only.
  315.  
  316.                             *errmsg-variable*
  317. errmsg        Last given error message.  It's allowed to set this variable.
  318.         Example:
  319. >    :let errmsg = ""
  320. >    :next
  321. >    :if (errmsg != "")
  322. >    :  ...
  323.  
  324.                             *version-variable*
  325. version        Version number of Vim: Major version number times 100 plus
  326.         minor version number.  Version 5.0 is 500.  Version 5.1 (5.01)
  327.         is 501.  Read-only.
  328.  
  329. ==============================================================================
  330. 4. Function calls                        *functions*
  331.  
  332. USAGE                RESULT    DESCRIPTION    ~
  333.  
  334. buffer_exists({expr})        Number    TRUE if a buffer {exp} exists
  335. char2nr({expr})            Number  ASCII value of first char in {expr}
  336. col({expr})            Number    column nr of cursor or mark
  337. delete({expr})            Number    delete file {expr}
  338. exists({var})            Number    TRUE if {var} exists
  339. expand({expr})            String    expand file wildcards in {expr}
  340. file_readable({file})        Number    TRUE if {file} is a readable file
  341. getline({lnum})            String    line {lnum} from current buffer
  342. has({feature})            Number    TRUE if feature {feature} supported
  343. highlight_exists({name})    Number    TRUE if highlight group {name} exists
  344. highlightID({name})        Number  syntax ID of highlight group {name}
  345. hostname()            String    name of the machine vim is running on
  346. isdirectory({directory})    Number    TRUE if {directory} is a directory
  347. last_buffer_nr()        Number    buffer number of last buffer
  348. line({expr})            Number    line nr of cursor, last line or mark
  349. match({expr}, {pat})        Number    position where {pat} matches in {expr}
  350. matchend({expr}, {pat})        Number    position where {pat} ends in {expr}
  351. nr2char({expr})            String    single char with ASCII value {expr}
  352. strftime({expr})        String    current time in specified format
  353. strlen({expr})            Number    length of the String {expr}
  354. strpart({src}, {start}, {len})    String    {len} characters of {src} at {start}
  355. synID({line}, {col}, {trans})    Number  syntax ID at {line} and {col}
  356. synIDattr({synID}, {what})    String  attribute {what} of syntax ID {synID}
  357. synIDtrans({synID})        Number  translated syntax ID of {synID}
  358. substitute({expr}, {pat},
  359.         {sub}, {flags})    String    all {pat} in {expr} replaced with {sub}
  360. tempname()            String    name for a temporary file
  361. virtcol({expr})            Number    screen column of cursor or mark
  362.  
  363.                             *buffer_exists()*
  364. buffer_exists({var})
  365.         The result is a Number, which is non-zero if a buffer called
  366.         {var} exists.  If the {var} argument is a string it must match
  367.         a buffer name exactly.  If the {var} argument is a number
  368.         buffer numbers are used.  Use "buffer_exists(0)" to test for
  369.         the existence of an alternate file name.
  370.  
  371.                             *char2nr()*
  372. char2nr({expr})
  373.         Return ASCII value of the first char in {expr}.  Examples:
  374.             char2nr(" ")    returns 32
  375.             char2nr("ABC")  returns 65
  376.  
  377.                             *col()*
  378. col({expr})    The result is a Number, which is the column of the file
  379.         position given with {expr}.  The accepted positions are:
  380.             .        the cursor position
  381.             'x        position of mark x (if the mark is not set, 0 is
  382.                 returned)
  383.         Note that only marks in the current file can be used.
  384.         Examples:
  385. >  col(".")            column of cursor
  386. >  col("'t")            column of mark t
  387. >  col("'" . markname)        column of mark markname
  388.         The first column is 1.  0 is returned for an error.
  389.  
  390.                             *delete()*
  391. delete({expr})    Deletes the file by the name {expr}.  The result is a Number,
  392.         which is 0 if the file was deleted succesfully, and non-zero
  393.         when the deletion failed.
  394.  
  395.                             *exists()*
  396. exists({expr})    The result is a Number, which is 1 if {var} is defined, zero
  397.         otherwise.  The {expr} argument is a string, which contains
  398.         one of these:
  399.  
  400.             &option-name      Vim option
  401.             $ENVNAME      environment variable (could also be
  402.                       done by comparing with an empty
  403.                       string)
  404.             varname          internal variable (see
  405.                       |internal-variables|).
  406.  
  407.         Examples:
  408. >            exists("&shortname")
  409. >            exists("$HOSTNAME")
  410. >            exists("bufcount")
  411.         Note that the argument must be a string, not the name of the
  412.         variable itself!  This doesn't check for existence of the
  413.         "bufcount" variable, but gets the contents of "bufcount", and
  414.         checks if that exists:
  415.             exists(bufcount)
  416.  
  417.                             *expand()*
  418. expand({expr})    Expand the file wildcards in {expr}.  The result is a String.
  419.         If the expansion fails, the result is an empty string.
  420.         Example:
  421. >            :let &tags = expand("`find . -name tags -print`")
  422.  
  423.         When the result of {expr} starts with '%', '#' or '<', the
  424.         expansion is done like for the |cmdline-special| variables
  425.         with their associated modifiers.  Here is a short overview:
  426.  
  427.         %            current file name
  428.         #            alternate file name
  429.         #n            alternate file name n
  430.         <cfile>            file name under the cursor
  431.         <afile>            autocmd file name
  432.         <sfile>            sourced script file name
  433.         <cword>            word under the cursor
  434.         <cWORD>            WORD under the cursor
  435.     Modifiers:
  436.         :p            expand to full path
  437.         :h            head (last path component removed)
  438.         :t            tail (last path component only)
  439.         :r            root (one extension removed)
  440.         :e            extension only
  441.  
  442.         Example:
  443. >            :let &tags = expand("%:p:h") . "/tags"
  444.  
  445.         There cannot be white space between the variables and the
  446.         following modifier.
  447.  
  448.         When using '%' or '#', and the current or alternate file name
  449.         is not defined, an empty string is used.  Using "%:p" in a
  450.         buffer with no name, results in the current directory, with a
  451.         '/' added.
  452.  
  453.  
  454.                             *file_readable()*
  455. file_readable({file})
  456.         The result is a Number, which is TRUE when a file with the
  457.         name {file} exists, and can be read.  If {file} doesn't exist,
  458.         or is a directory, the result is FALSE.  {file} is any
  459.         expression, which is used as a String.
  460.  
  461.                             *getline()*
  462. getline({lnum}) The result is a String, which is line {lnum} from the current
  463.         buffer.  Example:
  464. >  getline(1)
  465.         When {lnum} is a String that doesn't start with a
  466.         digit, line() is called to translate the String into a Number.
  467.         To get the line under the cursor:
  468. >  getline(".")
  469.         When {lnum} is smaller than 1 or bigger than the number of
  470.         lines in the buffer, an empty string is returned.
  471.  
  472.                             *has()*
  473. has({feature})    The result is a Number, which is 1 if the feature {feature} is
  474.         supported, zero otherwise.  The {feature} argument is a
  475.         string.  See |feature-list| below.
  476.  
  477.                                   *highlight_exists()*
  478. highlight_exists({name})
  479.         The result is a Number, which is non-zero if a highlight group
  480.         called {name} exists.  This is when the group has been
  481.         defined in some way.  Not necessarily when highlighting has
  482.         been defined for it, it may also have been used for a syntax
  483.         item.
  484.  
  485.                             *highlightID()*
  486. highlightID({name})
  487.         The result is a Number, which is the ID of the highlight group
  488.         with name {name}.  When the highlight group doesn't exist,
  489.         zero is returned.
  490.         This can be used to retrieve information about the highlight
  491.         group.  For example, to get the background color of the
  492.         "Comment" group:
  493. >    echo synIDattr(synIDtrans(highlightID("Comment")), "bg")
  494.  
  495.                                   *hostname()*
  496. hostname()
  497.         The result is a String, which is the name of the machine on
  498.         which Vim is currently running. Machine names greater than
  499.         256 characters long are truncated.
  500.  
  501.                             *isdirectory()*
  502. isdirectory({directory})
  503.         The result is a Number, which is TRUE when a directory with
  504.         the name {directory} exists.  If {directory} doesn't exist, or
  505.         isn't a directory, the result is FALSE.  {directory} is any
  506.         expression, which is used as a String.
  507.  
  508.                             *last_buffer_nr()*
  509. last_buffer_nr()
  510.         The result is a Number, which is the highest buffer number
  511.         of existing buffers.  Note that not all buffers with a smaller
  512.         number necessarily exist, because ":bdel" may have removed
  513.         them.  Use buffer_exists() to test for the existence of a
  514.         buffer.
  515.                             *line()*
  516. line({expr})    The result is a Number, which is the line number of the file
  517.         position given with {expr}.  The accepted positions are:
  518.             .        the cursor position
  519.             $        the last line in the current buffer
  520.             'x        position of mark x (if the mark is not set, 0 is
  521.                 returned)
  522.         Note that only marks in the current file can be used.
  523.         Examples:
  524. >  line(".")        line number of the cursor
  525. >  line("'t")        line number of mark t
  526. >  line("'" . marker)    line number of mark marker
  527.  
  528.                             *strftime()*
  529. strftime({format})
  530.         The result is a String, which is the current date and time, as
  531.         specified by the {format} string.  See the manual page of the
  532.         C function strftime() for the format.  The maximum length of
  533.         the result is 80 characters.  Examples:
  534. >          :echo strftime("%c")           Sun Apr 27 11:49:23 1997
  535. >          :echo strftime("%Y %b %d %X")       1997 Apr 27 11:53:25
  536. >          :echo strftime("%y%m%d %T")      970427 11:53:55
  537. >          :echo strftime("%H:%M")          11:55
  538.  
  539.                             *match()*
  540. match({expr}, {pat})
  541.         The result is a Number, which gives the index in {expr} where
  542.         {pat} matches.  If there is no match -1 is returned.  Example:
  543. >          :echo match("testing", "ing")
  544.         results in "4".
  545.         See |pattern| for the patterns that are accepted.
  546.  
  547.                             *matchend()*
  548. matchend({expr}, {pat})
  549.         Same as match(), but return the index of first character after
  550.         the match.  Example:
  551. >          :echo matchend("testing", "ing")
  552.         results in "7".
  553.  
  554.                             *nr2char()*
  555. nr2char({expr})
  556.         Return a string with a single chararacter, which has the ASCII
  557.         value {expr}.  Examples:
  558.             nr2char(64)        returns "@"
  559.             nr2char(32)        returns " "
  560.  
  561.                             *strlen()*
  562. strlen({expr})    The result is a Number, which is the length of the String
  563.         {expr}.
  564.  
  565.                             *strpart()*
  566. strpart({src}, {start}, {len})
  567.         The result is a String, which is part of {src},
  568.         starting from character {start}, with the length {len}.
  569.         When non-existing characters are included, this doesn't result
  570.         in an error, the characters are simply omitted.
  571. >    strpart("abcdefg", 3, 2)    == "de"
  572. >    strpart("abcdefg", -2, 4)   == "ab"
  573. >    strpart("abcdefg", 5, 4)    == "fg"
  574.         Note: To get the first character, {start} must be 0.  For
  575.         example, to get three characters under and after the cursor:
  576. >    strpart(getline(line(".")), col(".") - 1, 3)
  577.  
  578.                             *synID()*
  579. synID({line}, {col}, {trans})
  580.         The result is a Number, which is the syntax ID at the position
  581.         {line} and {col} in the current window.
  582.         The syntax ID can be used with |synIDattr()| and
  583.         |synIDtrans()| to obtain syntax information about text.
  584.         {col} is 1 for the leftmost column, {line} is 1 for the first
  585.         line.
  586.         When {trans} is non-zero, transparant items are reduced to the
  587.         item that they reveal.  This is useful when wanting to know
  588.         the effective color.  When {trans} is zero, the transparant
  589.         item is returned.  This is useful when wanting to know which
  590.         syntax item is effective (e.g. inside parens).
  591.         Warning: This function can be very slow.  Best speed is
  592.         obtained by going through the file in forward direction.
  593.  
  594.         Example (echos the name of the syntax item under the cursor):
  595. >    :echo synIDattr(synID(line("."), col("."), 1), "name")
  596.  
  597.                             *synIDattr()*
  598. synIDattr({synID}, {what})
  599.         The result is a String, which is the {what} attribute of
  600.         syntax ID {synID}.  This can be used to obtain information
  601.         about a syntax item.
  602.         The attributes for the currently active highlighting are used
  603.         (GUI, cterm or term).
  604.         Use synIDtrans() to follow linked highlight groups.
  605.         {what}        result
  606.         "name"        the name of the syntax item
  607.         "fg"        foreground color (GUI: color name, cterm:
  608.                 color number as a string, term: empty string)
  609.         "bg"        background color (like "fg")
  610.         "fg#"        like "fg", but name in "#RRGGBB" form
  611.         "bg#"        like "bg", but name in "#RRGGBB" form
  612.         "bold"        "1" if bold
  613.         "italic"    "1" if italic
  614.         "reverse"    "1" if reverse
  615.         "inverse"    "1" if inverse (= reverse)
  616.         "underline"    "1" if underlined
  617.  
  618.         Example (echos the color of the syntax item under the cursor):
  619. >    :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
  620.  
  621.                             *synIDtrans()*
  622. synIDtrans({synID})
  623.         The result is a Number, which is the translated syntax ID of
  624.         {synID}.  This is the syntax group ID of what is being used to
  625.         highlight the character.  Highlight links are followed.
  626.  
  627.                             *substitute()*
  628. substitute({expr}, {pat}, {sub}, {flags})
  629.         The result is a String, which is a copy of {expr}, in which
  630.         the first match of {pat} is replaced with {sub}.  This works
  631.         like the ":substitute" command (without any flags).
  632.         When {pat} does not match in {expr}, {expr} is returned
  633.         unmodified.
  634.         {flags} isn't implemented yet.
  635.         Example:
  636. >          :let &path = substitute(&path, ",\\=[^,]*$", "", "")
  637.         This removes the last component of the 'path' option.
  638. >          :echo substitute("testing", ".*", "\\U\\0", "")
  639.         results in "TESTING".
  640.  
  641.                             *tempname()*
  642. tempname()
  643.         The result is a String, which is the name of a unique file.
  644.         It can be used for a temporary file.
  645.  
  646.                             *virtcol()*
  647. virtcol({expr})
  648.         The result is a Number, which is the screen column of the file
  649.         position given with {expr}.  That is, the last screen position
  650.         occupied by the character at that position, when the screen
  651.         would be of unlimited width.  When there is a <Tab> at the
  652.         position, the returned Number will be the column at the end of
  653.         the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
  654.         set to 8, it returns 8;
  655.         The accepted positions are:
  656.             .        the cursor position
  657.             'x        position of mark x (if the mark is not set, 0 is
  658.                 returned)
  659.         Note that only marks in the current file can be used.
  660.         Examples:
  661. >  virtcol(".")        with text "foo^Lbar", with cursor on the "^L", returns 5
  662. >  virtcol("'t")    with text "    there", with 't at 'h', returns 6
  663.         The first column is 1.  0 is returned for an error.
  664.  
  665.  
  666.                             *feature-list*
  667. There are two types of features:
  668. 1.  Features that are only supported when they have been enabled when Vim
  669.     was compiled |+feature-list|.  Example:
  670. >        :if has("cindent")
  671. 2.  Features that are only supported when certain conditions have been met.
  672.     Example:
  673. >        :if has("gui_running")
  674.  
  675. all_builtin_terms    Compiled with all builtin terminals enabled.
  676. amiga            Amiga version of Vim.
  677. arp            Compiled with ARP support (Amiga).
  678. autocmd            Complied with autocommands support.
  679. beos            BeOS version of Vim.
  680. builtin_terms        Compiled with some builtin terminals.
  681. cindent            Compiled with 'cindent' support.
  682. compatible        Compiled to be very Vi compatible.
  683. debug            Compiled with "DEBUG" defined.
  684. digraphs        Compiled with support for digraphs.
  685. dos32            32 bits DOS (DJGPP) version of Vim.
  686. dos16            16 bits DOS version of Vim.
  687. emacs_tags        Compiled with support for Emacs tags.
  688. eval            Compiled with exression evaluation support.  Always
  689.             true, of course!
  690. ex_extra        Compiled with extra Ex commands |+ex_extra|.
  691. extra_search        Compiled with support for |'incsearch'| and
  692.             |'hlsearch'|
  693. farsi            Compiled with Farsi support |farsi|.
  694. file_in_path        Compiled with support for |gf| and |<cfile>|
  695. find_in_path        Compiled with support for include file searches
  696.             |+find_in_path|.
  697. fname_case        Case in file names matters (for Amiga, MS-DOS, and
  698.             Windows this is not present).
  699. fork            Compiled to use fork()/exec() instead of system().
  700. gui            Compiled with GUI enabled.
  701. gui_athena        Compiled with Athena GUI.
  702. gui_beos        Compiled with BeOs GUI.
  703. gui_mac            Compiled with Macintosh GUI.
  704. gui_motif        Compiled with Motif GUI.
  705. gui_win32        Compiled with MS Windows Win32 GUI.
  706. gui_running        Vim is running in the GUI, or it will start soon.
  707. insert_expand        Compiled with support for CTRL-X expansion commands in
  708.             Insert mode.
  709. langmap            Compiled with 'langmap' support.
  710. lispindent        Compiled with support for lisp indenting.
  711. mac            Macintosh version of Vim.
  712. mouse_dec        Compiled with support for Dec terminal mouse.
  713. mouse_netterm        Compiled with support for netterm mouse.
  714. mouse_xterm        Compiled with support for xterm mouse.
  715. ole            Compiled with OLE automation support for Win32.
  716. perl            Compiled with Perl interface.
  717. python            Compiled with Python interface.
  718. quickfix        Compiled with |quickfix| support.
  719. rightleft        Compiled with 'rightleft' support.
  720. showcmd            Compiled with 'showcmd' support.
  721. smartindent        Compiled with 'smartindent' support.
  722. sniff            Compiled with SniFF interface support.
  723. syntax            Compiled with syntax highlighting support.
  724. syntax_items        There are active syntax highlighting items for the
  725.             current buffer.
  726. system            Compiled to use system() instead of fork()/exec().
  727. tag_binary        Compiled with binary searching in tags files
  728.             |tag-binary-search|.
  729. tag_old_static        Compiled with support for old static tags
  730.             |tag-old-static|.
  731. tag_any_white        Compiled with support for any white characters in tags
  732.             files |tag-any-white|.
  733. terminfo        Compiled with terminfo instead of termcap.
  734. textobjects        Compiled with support for |text-objects|.
  735. tgetent            Compiled with tgetent support, able to use a termcap
  736.             or terminfo file.
  737. unix            Unix version of Vim.
  738. viminfo            Compiled with viminfo support.
  739. win32            Win32 version of Vim (Windows 95/NT)
  740. writebackup        Compiled with 'writebackup' default on.
  741. xterm_save        Compiled with support for saving and restoring the
  742.             xterm screen.
  743. x11            Compiled with X11 support.
  744.  
  745. ==============================================================================
  746. 5. Commands                        *expression-commands*
  747.  
  748. :let {var-name} = {expr1}                *:let*
  749.             Set internal variable {var-name} to the result of the
  750.             expression {expr1}.  The variable will get the type
  751.             from the {expr}.  if {var-name} didn't exist yet, it
  752.             is created.
  753.  
  754. :let ${env-name} = {expr1}            *:let-environment* *:let-$*
  755.             Set environment variable {env-name} to the result of
  756.             the expression {expr1}.  The type is always String.
  757.  
  758. :let @{reg-name} = {expr1}            *:let-register* *:let-@*
  759.             Write the result of the expression {expr1} in register
  760.             {reg-name}.  {reg-name} must be a single letter, and
  761.             must be the name of a writable register (see
  762.             |registers|).  "@@" can be used for the unnamed
  763.             register.  If the result of {expr1} ends in a <CR> or
  764.             <NL>, the register will be linewise, otherwise it will
  765.             be set to characterwise.
  766.  
  767. :let &{option-name} = {expr1}            *:let-option* *:let-star*
  768.             Set option {option-name} to the result of the
  769.             expression {expr1}.  The type of the option is always
  770.             used.
  771.  
  772.                             *:unlet* *:unl*
  773. :unl[et] {var-name}    Remove the internal variable {var-name}.
  774.  
  775. :if {expr1}                        *:if* *:endif* *:en*
  776. :en[dif]        Execute the commands until the next matching ":else"
  777.             or ":endif" if {expr1} evaluates to non-zero.
  778.  
  779.             From Vim version 4.5 until 5.0, every Ex command in
  780.             between the ":if" and ":endif" is ignored.  These two
  781.             commands were just to allow for future expansions in a
  782.             backwards compatible way.  Nesting was allowed.  Note
  783.             that any ":else" or ":elseif" was ignored, the "else"
  784.             part was not executed either.
  785.  
  786.             You can use this to remain compatible with older
  787.             versions:
  788. >                :if version >= 500
  789. >                :  version-5-specific-commands
  790. >                :endif
  791.  
  792.                             *:else* *:el*
  793. :else            Execute the commands until the next matching ":else"
  794.             or ":endif" if they previously were not being
  795.             executed.
  796.  
  797.                             *:elseif* *:elsei*
  798. :elsei[f] {expr1}    Short for ":else" ":if", with the addition that there
  799.             is no extra ":endif".
  800.  
  801. :wh[ile] {expr1}            *:while* *:endwhile* *:wh* *:endw*
  802. :endw[hile]        Repeat the commands between ":while" and ":endwhile",
  803.             as long as {expr1} evaluates to non-zero.
  804.             When an error is detected from a command inside the
  805.             loop, execution continues after the "endwhile".
  806.  
  807.         NOTE: The ":append" and ":insert" commands don't work properly
  808.         inside a ":while" loop.
  809.  
  810.                             *:continue* *:con*
  811. :con[tinue]        When used inside a ":while", jumps back to the
  812.             ":while".
  813.  
  814.                             *:break* *:brea*
  815. :brea[k]        When used inside a ":while", skips to the command
  816.             after the matching ":endwhile".
  817.  
  818.                             *:ec* *:echo*
  819. :ec[ho] {expr1} ..    Echoes each {expr1}, with a space in between and a
  820.             terminating <EOL>.  Also see |:comment|.
  821.             Example:
  822. >        :echo "the value of 'shell' is" &shell
  823.  
  824.                             *:echon*
  825. :echon {expr1} ..    Echoes each {expr1}, without anything added.  Also see
  826.             |:comment|.
  827.             Example:
  828. >        :echon "the value of 'shell' is " &shell
  829.  
  830.             Note the difference between using ":echo", which is a
  831.             Vim command, and ":!echo", which is an external shell
  832.             command:
  833. >        :!echo %        --> filename
  834.             The arguments of ":!" are expanded, see |:_%|.
  835. >        :!echo "%"        --> filename or "filename"
  836.             Like the previous example.  Whether you see the double
  837.             quotes or not depends on your 'shell'.
  838. >        :echo %            --> nothing
  839.             The '%' is an illegal character in an expression.
  840. >        :echo "%"        --> %
  841.             This just echoes the '%' character.
  842. >        :echo expand("%")    --> filename
  843.             This calls the expand() function to expand the '%'.
  844.  
  845.                             *:exe* *:execute*
  846. :exe[cute] {expr1} ..    Executes the string that results from the evaluation
  847.             of {expr1} as an Ex command.  Multiple arguments are
  848.             concatenated, with a space in between.  Examples:
  849. >        :execute "buffer " nextbuf
  850. >        :execute "normal " count . "w"
  851.  
  852.             Execute can be used to append a next command to
  853.             commands that don't accept a '|'.  Example:
  854. >        :execute '!ls' | echo "theend"
  855.  
  856.             Note: The executed string may be any command line, but
  857.             you cannot start or end a "while" or "if" command.
  858.             Thus this is illegal:
  859. >        :execute 'while i > 5'
  860. >        :execute 'echo "test" | break'
  861.  
  862.             It is allowed to have a "while" or "if" command
  863.             completely in the executed string:
  864. >        :execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
  865.  
  866.  
  867.                             *:comment*
  868.             ":execute", ":echo" and ":echon" cannot be followed by
  869.             a comment directly, because they see the '"' as the
  870.             start of a string.  But, you can use '|' followed by a
  871.             comment.  Example:
  872. >        :echo "foo" | "this is a comment
  873.  
  874.  vim:tw=78:ts=8:sw=8:
  875.